// src/utils/utils.ts
/**
 * 将列表转换为树形结构
 * @param data 列表数据
 * @param parentKey 父级键名
 * @param childrenKey 子级键名
 * @returns 树形结构数据
 */
export const listToTree = <T extends Record<string, any> & { children?: T[] }>(
  data: T[],
  parentKey: keyof T,
  childrenKey: keyof T
): T[] => {
  if (!data || data.length === 0) {
    return []
  }

  // 创建结果数组
  const result: T[] = []

  // 创建映射表，便于快速查找
  const map = new Map<any, T>()
  data.forEach((item) => {
    map.set(item[childrenKey], { ...item })
  })

  // 构建树形结构
  data.forEach((item) => {
    const parentId = item[parentKey]
    const nodeId = item[childrenKey]
    const node = map.get(nodeId)

    if (!node) return

    // 如果没有父节点或者父节点为 null/0，则为根节点
    if (!parentId && parentId !== 0) {
      result.push(node)
    } else {
      // 否则添加为父节点的子节点
      const parent = map.get(parentId)
      if (parent) {
        if (!parent.children) {
          parent.children = []
        }
        parent.children.push(node)
      }
    }
  })

  return result
}

// 生成uuid
export const uuid = () => {
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
    const r = (Math.random() * 16) | 0
    const v = c === 'x' ? r : (r & 0x3) | 0x8
    return v.toString(16)
  })
}

export default {
  listToTree
}
